--串口调试FPGA的LLCOM脚本示例


-------------------------------------- 指令格式 ----------------------------------------
--| 指令头[一个字节]   | 指令编号[一个字节]   | 指令数据段[4个字节]  | 指令尾[一个字节]    |
--| :--------------:  | :----------------: | :-----------------: | :--------------:  |
--|       0xAA        |       0-255        |         --          |       0x55        |
---------------------------------------------------------------------------------------


----------- 全局变量 -------------------
file = io.open ("dat/t.txt","w+")
io.output(file)
cnt = 1000


---------------------------------------
--函数名:int2hex
--功能 ：32位int的十进制标志转8位十六进制
-- 表示
--例如：12 --> 0000000c  
-- -12 --> fffffff4
---------------------------------------
function int2hex(x)
    local b32HH = (x >> 24) & 0xff;
    local b32HL = (x >> 16) & 0xff;
    local b32LH = (x >>  8) & 0xff;
    local b32LL = (x      ) & 0xff;
    local a = string.format("%02x",b32HH)
    local b = string.format("%02x",b32HL)
    local c = string.format("%02x",b32LH)
    local d = string.format("%02x",b32LL)
    local e=a..b..c..d
    return e
end
---------------------------------------
--函数名:char2hex
--功能 ：十进制char转16进制
--输入： 0-255 
--例如: 12  --> 0c  
--     -12  --> f4
---------------------------------------
function char2hex(x)
    x= x & 0xff;
    return string.format("%02x",x)
end


--注册串口接收函数
--

uartReceive = function (data)
    sys.publish("UART",data)--发布消息
    io.write(data)
    if(cnt==0)  then 
    	io.close(file)
    end 
end
--




---------------------------------------
--函数名:SendCmd
--功能 ：发送一次指令，运行该脚本后可以使用该函数进行调试
--@param1： 0-255 
--@param2： int型数据
---------------------------------------
function SendCmd(cmd,data)
	local str = char2hex(170)..char2hex(cmd)..int2hex(data)..char2hex(85)
	str=string.fromHex(str)
	log.info("SendCmd",apiSendUartData(str),"cmd="..cmd,"cmd_data="..data)
end



function testPwm(value)
	SendCmd(1,100)  --设置计数器最大值   1-100
	SendCmd(2,0)    --设置计数器初始值 0 ，关闭pwm输出
	local duty = value
	local cnt=5000
	while (cnt>0) do 
		SendCmd(2,duty)
		duty=duty+2
		if (duty>100) then duty = 0 end 
		cnt=cnt-1
		sys.wait(2)
	end 
end

sys.taskInit(function ()
	local cmd=1
    local cmd_data=-12
    local str=""
    while (cnt>0) do    --true do
    	if(cmd_data>=12000) then 
    		cmd_data = 12
    	else 
    		cmd_data = cmd_data + 1
    	end
    	--str=char2hex(170)..char2hex(cmd)..int2hex(cmd_data)..char2hex(85)
    	str="\n"..cmd_data
        --log.info("send data",apiSendUartData(str),"cmd="..cmd,"cmd_data="..cmd_data)
        apiSendUartData(str)
        cnt = cnt-1
    	sys.wait(10) --等待的ms
    end
   
end)















